// api/mcpApi.ts

/**
 * MCP (Multi-Component Planner) 调度 API 封装
 * 对应后端 endpoints/mcp.py
 */

import { initializeApiConfig } from './config';
const API_BASE = initializeApiConfig(); 

// --- 类型定义 ---

// 对应后端的 MCPRequest
export interface MCPRequestPayload {
    question: string; // 用户输入的自然语言问题
    session_id?: string; // 可选的会话 ID
    account_id?: string; // 可选的用户 ID
}

// 对应后端的 MCP 指令响应结构
// 这是一个假设的通用结构，通常包含 action 和 arguments
export interface MCPCommand {
    action: string; // 例如: 'RAG_QUERY', 'SEARCH_DB', 'PLAN_EXECUTE'
    arguments: { [key: string]: any }; // 指令所需的参数
    reasoning?: string; // 规划器生成的推理过程
}

// 辅助函数（假设从公共文件中引入）
interface ErrorDetail { detail: string; }
async function handleResponse<T>(response: Response): Promise<T> {
  if (!response.ok) {
    let errorDetail: ErrorDetail = { detail: '未知 API 错误' };
    try {
      errorDetail = await response.json();
    } catch (e) {
      const text = await response.text();
      errorDetail.detail = response.statusText + ': ' + text.substring(0, 100) + '...';
    }
    throw new Error(errorDetail.detail);
  }
  if (response.status !== 204 && response.headers.get('content-length') !== '0') {
      return response.json();
  }
  return {} as T;
}

// -------------------------------------------------------------------
// --- API 方法定义 ---
// -------------------------------------------------------------------

/**
 * 通用的 MCP 调度接口，接收问题并返回一个 MCP 指令。
 * POST /api/v1/mcp/dispatch-command
 * @param payload 包含用户问题的请求体
 */
export const dispatchMcpCommand = async (
    payload: MCPRequestPayload
): Promise<MCPCommand> => {
    
    if (!payload.question) {
        throw new Error("问题 (question) 不能为空。");
    }
    
    const response = await fetch(`${API_BASE}/mcp/dispatch-command`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload),
    });

    return handleResponse(response);
};